package com.nurt.service;

import com.nurt.entity.OrderDishEntity;
import com.nurt.entity.OrderEntity;

import java.util.List;

/**
 * 订单服务接口，提供订单相关的操作方法。
 */
public interface OrderService {

    /**
     * 根据用户ID获取该用户的订单列表。
     *
     * @param userId 用户ID。
     * @return 用户的订单列表。
     */
    List<OrderEntity> getOrders(int userId);

    /**
     * 根据用户ID和订单状态获取特定状态的订单。
     *
     * @param userId 用户ID。
     * @param status 订单状态。
     * @return 指定用户和状态的订单。
     */
    OrderEntity getOrderByStatus(int userId, int status);

    /**
     * 创建一个新的订单。
     *
     * @param order 待创建的订单实体。
     */
    void createOrder(OrderEntity order);

    /**
     * 更新订单的状态。
     *
     * @param orderId 订单ID。
     * @param status 新的订单状态。
     */
    void updateOrderStatus(int orderId, int status);

    /**
     * 向订单中添加菜品。
     *
     * @param orderId 订单ID。
     * @param dishId 菜品ID。
     * @return 更新后的菜品总数。
     */
    int addToCart(int orderId, int dishId);

    /**
     * 从订单中移除菜品。
     *
     * @param orderId 订单ID。
     * @param dishId 菜品ID。
     */
    void removeFromCart(int orderId, int dishId);

    /**
     * 获取订单中的菜品列表。
     *
     * @param orderId 订单ID。
     * @return 订单中的菜品列表。
     */
    List<OrderDishEntity> getCartContents(int orderId);

    /**
     * 清空订单中的菜品。
     *
     * @param orderId 订单ID。
     */
    void clearCart(int orderId);

    /**
     * 下订单，将购物车中的菜品转换为正式订单。
     *
     * @param order 待下订单的实体。
     */
    void placeOrder(OrderEntity order);

    /**
     * 更新订单中的菜品信息。
     *
     * @param orderDish 待更新的菜品实体。
     */
    void updateOrderDish(OrderDishEntity orderDish);
}

